package com.edvard.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;

/**
 * 
 *----------Dragon be here!----------/
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 *  Copied by edvard from internet.
 *  
 *  Common method activity
 */
public class CommonMethodActivity extends Activity{
	
	/**
	 * 判断sd卡是否为挂载的状态
	 * 
	 * @return true 为挂载 false 为未挂载
	 */
	public boolean isSdCardMount() {
		if (Environment.getExternalStorageState().equals(
				"android.intent.action.MEDIA_REMOVED"))
			return false;
		return true;
	}
	
	/**
	 * 判断数据库文件是否存在
	 * @return
	 */
	public boolean isDatabaseFileExist(){
		File dbFile = this
				.getDatabasePath(DatabaseHelper.DATABASE_NAME);
		return dbFile.exists();
	}
	
	/**
	 * 返回文件名称，是以日期作为文件名称。 android中文件名不能包含" ："
	 * 
	 * @return string date
	 */
	@SuppressLint("SimpleDateFormat")
	public String getStrDate() {
		//根据毫秒初始化一个date对象
		Date date = new Date(System.currentTimeMillis());
		//初始化一个时间格式化对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd HH mm ss");
		//格式化时间
		String strDate = sdf.format(date);
		//根据空格分割字符串数组
		String[] strs = strDate.split(" ");
		strDate = "";
		//拼接字符串数据
		strDate = strs[0] + "年" + strs[1] + "月" + strs[2] + "日 " + strs[3]
				+ "时" + strs[4] + "分" + strs[5] + "秒";
		return strDate;
	}

	/**
	 * 复制一个文件到另外一个地方
	 * 
	 * @param src
	 *            文件源路径
	 * @param dst
	 *            文件目的路径
	 * @param succedInfo
	 *            复制成功的信息
	 * @param errorInfo
	 *            复制失败的信息
	 * @param progressDialog
	 *            进度框
	 */
	public void copyFile(File src, File dst, String succedInfo, String errorInfo,
			ProgressDialog progressDialog) {
		try {
			//输出流
			OutputStream os = new FileOutputStream(dst);
			//输入流
			InputStream is = new FileInputStream(src);
			byte[] buffer = new byte[512];
			int length;
			while ((length = is.read(buffer)) > 0) {
				os.write(buffer, 0, length);
			}
			//关闭输入输出流
			is.close();
			os.close();
			//关闭弹出提示框
			progressDialog.dismiss();
			showToast(succedInfo);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			progressDialog.dismiss();
			showToast(errorInfo);
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			progressDialog.dismiss();
			showToast(errorInfo);
			e.printStackTrace();
		}
	}
	
	/**
	 * 显示软键盘
	 * @param v
	 */
	public void showInput(View v) {
		InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
		imm.showSoftInput(v, 0);
	}
	
	/**
	 * 隐藏软键盘
	 * @param v
	 */
	public void hideInput(View v){
		InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
	}
	
	/**
	 * 
	 * @author edvard
	 * 按下返回按钮
	 * 隐藏软件盘并且隐藏弹出窗口
	 *
	 */
	public class DialogKeyClickListener implements android.content.DialogInterface.OnKeyListener{
		private View view;
		public DialogKeyClickListener(View view) {
			// TODO Auto-generated constructor stub
			this.view = view;
		}
		@Override
		public boolean onKey(DialogInterface dialogInter, int keyCode, KeyEvent arg2) {
			// TODO Auto-generated method stub
			if(keyCode == KeyEvent.KEYCODE_BACK){
				hideInput(view);
				setDialogVisiable(dialogInter, false);
				dialogInter.dismiss();
			}
			return false;
		}
	}
	

	/**
	 * dialog是否显示
	 * @param dialogInterface 窗口的接口
	 * @param visiable 设置其是否可见
	 */
	public void setDialogVisiable(DialogInterface dialogInter,boolean visiable){
		try {
			Field field;
			field = dialogInter.getClass().getSuperclass().getDeclaredField("mShowing");
	        field.setAccessible(true); 
	        if(visiable)
	        	field.set(dialogInter, false);
	        else
	        	field.set(dialogInter, true);
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

	}
	
	/**
	 * 弹出提示
	 * 
	 * @param msg
	 */
	public void showToast(String msg) {
		Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
	}
	
}
